import global from './config.js'
const msg = (title) => {
	uni.showToast({
		title,
		position: 'center',
		icon: "none"
	})
}
const config = { //请求配置
	baseUrl: global.api || global.baseUrl, // 请求的本域名
	method: 'POST', //默认请求方式
	dataType: 'json', // 设置为json，返回后会对数据进行一次JSON.parse()
	showLoading: false, // 是否显示请求中的loading
	loadingTime: 800, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms 默认200
	loadingMask: false, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透 默认 false
	loadingText: '加载中~', // 请求loading中的文字提示
}
let timerJump = true //短时间内只跳转一次
let timerloading = '' //定时器

function request(url = '', data = {}, method = config.method){
	let getData = uni.$z.getData
	// if (!config.baseUrl) return "", msg('请先配置域名')
	return new Promise((resolve, reject) => {
		if (config.showLoading) { //是否显示加载中动画
			clearTimeout(timerloading)
			timerloading = setTimeout(() => { //延迟加载动画
				uni.showLoading({
					mask: config.loadingMask || false, //展示loading的时候，是否给一个透明的蒙层
					title: config.loadingText || '', //文字提示
					success() {
						uni.$once('hideLogin', () => uni.hideLoading()) //如果接口成功则隐藏加载
					}
				})
			}, config.loadingTime || 200) //延迟加载动画200ms
		}
		url[0] == '/' ? '' : url = '/' + url //判断url前面是否带/
		// let myAdd = getApp().globalData?.myAdd || uni.getStorageSync('myAdd') || ''
		uni.request({
			url: config.baseUrl + url,
			method,
			data,
			dataType: config.dataType || 'json',
			header: {
				// "Access-Control-Allow-Origin":'',
				'content-type': 'application/json;charset=UTF-8', // JSON数据格式
				// 'content-Type': 'application/x-www-form-urlencoded',
				// <form encType=””>中默认的encType，form表单数据被编码为key/value格式发送到服务器（表单默认的提交数据的格式）
				Authorization: getData('token')||'', // token
				shopid: getData('shopToken')||'', //不同参数，不同商家
				cityid: getData('city')?.id||'',//当前城市
				location: getData('location')||'',//当前定位

				port: 'master',
				// #ifdef H5
				platform: 'h5',
				// #endif
				// #ifdef APP-NVUE
				platform: 'app',
				// #endif
				// #ifdef MP-WEIXIN
				platform: 'weixin',
				// #endif

			},
			success(resData) {
				if (resData.statusCode != 200) {
					msg('statusCode:' + resData.statusCode)
				}
				let res = resData.data
				if (res.page) jump(res.page) //跳转
				if (res.code == 1) {
					return resolve(res)
				} else if (res.code == 2) { //正确且提示
					msg(res.msg) //提示
					return resolve(res)
				} else if (res.code == 401) {
					if (timerJump) {
						timerJump = false
						login(res)
					}
					reject(res)
				} else if (res.code == 0) {
					msg(res.msg) //返回错误信息
					reject(res)
				} else {
					console.error('未识别code 不做处理的数据')
					reject(resData)
				}
			},
			fail(err) {
				// console.error('服务返回错误 request:fail 错误信息:', err)
				reject(err)
			},
			complete() {
				clearTimeout(timerloading)
				uni.$emit('hideLogin', '')
			},
		})
	})
}
export default request

function login(res) { //401后
	uni.$z?.store?.chat_close()
	// 就去登录页
	// #ifndef MP-WEIXIN
	msg(res.msg)
	setTimeout(() => {
		uni.navigateTo({
			url: "/pages/login/login",
			complete() {
				setTimeout(() => {
					timerJump = true
				}, 2000)
			}
		})
	}, 1000)
	// #endif

	// #ifdef MP-WEIXIN
	uni.login({
		provider: 'weixin',
		success: res => {
			wx_login(res.code)
		},
		complete: () => {
			setTimeout(() => {
				timerJump = true
			}, 2000)
		}
	})
	// #endif
}

function wx_login(code = '') { //小程序静默登录
	request('/master/login/miniappLogin', {
		code,
		regcode: uni.getStorageSync('regcode') || ''
	}).then(res => { //登录成功
		let pages = getCurrentPages()
		let page = pages[pages.length - 1].$vm
		page.$login_success(res, '') //登录成功
	})
}

function jump(url) { //根据后端传参进行跳转
	setTimeout(() => {
		if (url == 'back') return uni.navigateBack()
		uni.navigateTo({
			url,
			fail() {
				uni.switchTab({
					url
				})
			}
		})
	}, 800)
}